package com.hxrfid.project.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hxrfid.common.core.domain.PageQuery;
import com.hxrfid.common.core.page.TableDataInfo;
import com.hxrfid.project.domain.BsOrder;
import com.hxrfid.project.domain.bo.BsOrderBo;
import com.hxrfid.project.domain.bo.BsOrderProductBo;
import com.hxrfid.project.domain.vo.BsOrderVo;
import com.hxrfid.project.domain.vo.MyBsOrderVo;
import org.springframework.web.bind.annotation.RequestBody;

import javax.servlet.http.HttpServletRequest;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 订单管理Service接口
 *
 * @author hxrfid
 * @date 2025-06-12
 */
public interface IBsOrderService extends IService<BsOrder> {

    /**
     * 查询订单管理
     * @param id 主键ID
     * @return 订单管理
     */
    BsOrderVo queryById(Long id);

    /**
     * 根据订单号查询订单
     * @param orderNo 订单号
     * @return 订单
     */
    BsOrderVo queryByOrderNo(String orderNo);

    /**
     * 查询订单管理列表
     * @param bo 订单管理对象
     * @param pageQuery 主键ID
     * @return 订单管理列表
     */
    TableDataInfo<BsOrderVo> queryPageList(BsOrderBo bo, PageQuery pageQuery);

    /**
     * 查询子用户列表
     * @param bo 分销员对象
     * @param pageQuery 主键ID
     * @return 子用户列表
     */
    TableDataInfo<MyBsOrderVo> queryPageListChild(BsOrderBo bo, PageQuery pageQuery);

    /**
     * 查询订单管理列表
     * @param bo 订单管理对象
     * @return 订单管理列表
     */
    List<BsOrderVo> queryList(BsOrderBo bo);

    /**
     * 获取用户订单金额
     * @param bo 订单管理对象
     * @return 订单金额
     */
    BsOrderBo getMoney(BsOrderBo bo);

    /**
     * 修改购物车
     * @param bo 订单管理对象
     * @return 修改后的订单信息
     */
    BsOrderBo editCart(BsOrderBo bo);

    /**
     * 购物车转订单
     */
    Boolean transferCart(BsOrderBo bo);

    /**
     * 新增订单管理
     * @param bo 订单管理对象
     */
    BsOrder insertByBo(BsOrderBo bo);

    /**
     * 修改订单管理
     * @param bo 订单管理对象
     * @return 是否成功
     */
    Boolean updateByBo(BsOrderBo bo);

    /**
     * 发货
     * @param bo 订单管理对象
     * @return 是否成功
     */
    Boolean sendByBo(BsOrderBo bo);

    /**
     * 校验并批量删除订单管理信息
     * @param ids 主键ID的list
     * @param isValid 是否业务校验
     * @return 是否成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 删除成员的绑定关系
     * @param userId 子用户ID
     * @return 是否成功
     */
    Boolean delChildOrder(Long userId);

    /**
     * 订单退款
     * @param bo 退款订单
     * @return 退款结果
     */
    Boolean refund(BsOrderBo bo);

    /**
     * 创建微信支付
     * @param bo 订单对象
     * @return 微信支付参数
     */
    Map<String, Object> createWxPay(@RequestBody BsOrderBo bo);

    /**
     * 处理微信支付回调通知
     * @param request 请求对象
     * @return 回调响应
     */
    String handleWxPayNotify(HttpServletRequest request);

    /**
     * 检查库存
     * @param details 订单商品对象
     * @return 检查结果
     */
    String checkInventory(List<BsOrderProductBo> details);
}
